% !Mode:: "TeX:UTF-8"

\section{项目设计与实现}

\subsection{硬件设计}

\subsubsection{系统总体架构}
本系统采用模块化设计思路，以STM32F103C8T6微控制器为核心，结合外部电路实现温湿度检测、红外人体感应、风扇驱动、蓝牙通信、蜂鸣器提示、OLED显示和按键交互等多项功能。系统架构主要包括：主控模块、传感器模块、红外接收模块、电机驱动模块和用户指示模块，各功能模块相互独立、便于扩展和维护。

\subsubsection{主控制器模块}
选用STM32F103C8T6单片机作为主控芯片，主要特点如下：
- 主频72MHz，基于Cortex-M3内核
- 64KB Flash，20KB SRAM
- 丰富的GPIO接口
- 3个通用定时器（TIM2/TIM3/TIM4）
- 12位ADC转换器
- 多种通信接口（USART、I2C、SPI等）
主控芯片负责全系统的数据采集、状态判断、控制信号输出与人机交互逻辑。

\subsubsection{人体红外感应模块}
HC-SR001 SR505

\subsubsection{蓝牙模块}
HC-05

\subsubsection{电机驱动模块}
采用TB6612FNG双H桥驱动芯片，实现对5V直流风扇电机的驱动与调速。  
- 控制引脚连接：

- 通过调节PWM信号的占空比，分挡实现风扇速度的无级或多档调节



\subsubsection{用户指示模块}
- 采用LED与蜂鸣器用于系统运行状态、定时及按键操作等提示：
- 蜂鸣器提示：PA0，配合按键操作或异常情况发声提醒

\subsection{软件设计}

\subsubsection{系统软件架构}
本系统采用分层设计，结构如下：
\begin{itemize}
    \item \textbf{硬件抽象层}：底层硬件（时钟、GPIO、定时器等）的配置与管理。
    \item \textbf{驱动层}：实现蓝牙模块、PWM输出、定时器配置等硬件功能的具体驱动。
    \item \textbf{应用层}：包括主控逻辑、状态管理和用户接口，实现风扇的智能控制与人机交互。
\end{itemize}

\subsubsection{主程序流程}
系统采用“中断驱动+状态机”设计思路，主程序流程如下：
\begin{enumerate}
    \item \textbf{系统初始化}（时钟、GPIO、定时器、中断等硬件资源配置）
    \item 进入主循环，检测系统状态
    \item 蓝牙中断服务程序处理遥控信号
    \item 定时中断处理PWM输出和定时功能
    \item 更新状态指示灯
\end{enumerate}



\begin{table}
    \centering
    \caption{蓝牙遥控功能键与系统响应关系}
    \begin{tabular}{|c|c|c|}
        \hline
        \textbf{按键功能} & \textbf{蓝牙编码} & \textbf{系统响应} \\
        \hline
        风速+        & -100，100任意数字 & 提高风速档位（低$\rightarrow$中$\rightarrow$高） \\
        风速-        & -100，100任意数字& 降低风速档位（高$\rightarrow$中$\rightarrow$低） \\
        换模式         & A & 手动自动切换 \\
        加档  & B & 速度按档加速 \\
        减档    & C & 速度按档减速 \\
        定时     & D & 定时器 \\
        温湿度查询   & E & 反馈温湿度 \\
        \hline
    \end{tabular}
\end{table}

\subsection{代码介绍}

本项目基于STM32微控制器实现了一个智能风扇系统，代码主要由初始化配置、主功能实现、中断与外设响应、循环结构等部分组成，模块化程度高，便于维护和扩展。

\subsubsection{初始化和配置}
系统启动后，首先对各个外设模块进行初始化，包括OLED显示屏、电机（风扇）、温湿度传感器（DHT11）、矩阵按键、红外检测、定时器、串口通信以及蜂鸣器等：
\begin{itemize}
    \item \texttt{OLED\_Init()}: 初始化OLED显示屏，用于实时显示温湿度、模式、档数、风扇速度和倒计时等信息。
    \item \texttt{Motor\_Init()}: 初始化PWM电机控制，用于驱动风扇调速。
    \item \texttt{DHT11\_Init()}: 初始化温湿度传感器，实时采集环境温湿度。
    \item \texttt{MatrixKey\_Init()}: 初始化矩阵按键，实现本地手动控制。
    \item \texttt{Red\_Init()}: 初始化红外人体感应模块，实现自动模式下的人体检测。
    \item \texttt{Timer\_Init()}: 初始化定时器，用于定时中断、倒计时和蜂鸣器计时。
    \item \texttt{Serial\_Init()}: 初始化串口通信，实现蓝牙远程控制与数据回传。
    \item \texttt{Buzzer\_Init()}、\texttt{BEEP\_GPIO\_Config()}: 初始化蜂鸣器，用于按键反馈与提醒。
\end{itemize}

\subsubsection{主功能实现}
主要功能通过主循环与定时中断协同实现，核心包括：
\begin{itemize}
    \item \textbf{环境感知与自动调节}：通过\texttt{DHT11\_Read\_Data(\&TH,\&RH)}获取实时温湿度数据，根据红外人体检测结果（\texttt{RED\_Data}）和设定的温度阈值，自动计算风扇转速，实现节能与舒适的智能调节。
    \item \textbf{模式切换与手动调速}：支持手动/自动两种模式。手动模式下可通过按键或蓝牙命令调节风速档位（\texttt{dang}），自动模式下由温度和人体检测决定风速。通过\texttt{KeyNum}（按键）、\texttt{BluetoothKey}和\texttt{RxBuffer}（蓝牙）等变量实现多源输入。
    \item \textbf{倒计时功能}：可通过按键设置倒计时时间（\texttt{Time}），到时由定时器中断自动关闭风扇，提升实用性和安全性。
    \item \textbf{OLED信息显示}：实时更新温湿度、当前模式、档数、速度、倒计时剩余时间等信息，增强用户交互体验。
    \item \textbf{蜂鸣器提示}：所有操作（按键、蓝牙切换、模式切换等）均有蜂鸣器提示音反馈，提升交互友好性。
\end{itemize}

\subsubsection{中断与外设响应}
\begin{itemize}
    \item \textbf{定时中断（\texttt{TIM1\_UP\_IRQHandler}）}：
    \begin{itemize}
        \item 定时刷新倒计时，倒计时结束时自动关闭风扇并清理相关状态。
        \item 定时采集按键值与红外状态，实现实时响应。
        \item 蜂鸣器定时自动关闭，避免持续响鸣。
    \end{itemize}
    \item \textbf{串口中断（\texttt{USART1\_IRQHandler}）}：
    \begin{itemize}
        \item 实现蓝牙远程控制，包括模式切换、加减档、定时等命令。
        \item 支持蓝牙端主动请求温湿度信息，并通过串口返回。
        \item 支持蓝牙端输入具体数值调节风扇速度。
    \end{itemize}
\end{itemize}

\subsubsection{循环结构}
主循环\texttt{while(1)}持续执行以下任务：
\begin{itemize}
    \item 周期性读取温湿度、红外状态
    \item 根据当前模式与环境信息计算风扇速度
    \item 更新OLED显示内容
    \item 实现多种输入方式的状态融合与控制
\end{itemize}

\subsubsection{技术实现细节}
\begin{itemize}
    \item \textbf{PWM调速}：通过TIM3产生20kHz PWM信号，调节CCR1寄存器实现占空比变化，精细控制风扇转速。
    \item \textbf{红外解码优化}：定时器输入捕获+状态机，支持噪声抑制、脉冲宽度判定、地址/命令码校验、间隔去抖等，显著提升了人体感应的可靠性。
    \item \textbf{低功耗设计}：空闲时可进入STOP模式，静态功耗低于1mA，适用于长时无人场景。
\end{itemize}

\vspace{0.5em}
本项目代码结构清晰，功能模块独立，支持本地与远程多种交互方式，兼顾智能性、实用性与用户体验。具体实现可参考\texttt{main.c}代码与上述功能描述。
